Grundkurs SQL

2.4.1  Grundform des INNER JOIN

Wir rufen uns unser Beispiel wieder ins Gedächtnis. Mitarbeiter und Abteilungen sollen gemeinsam abgefragt werden und sind über das gemeinsame Attribut abteilung_ID zu verbinden. Wir wollen gleich einen Blick auf die fertige Anweisung werfen und die Erklärung nachliefern.

SELECT tbl_mitarbeiter.name, tbl_abteilung.abteilungsname
FROM   tbl_abteilung
       INNER JOIN tbl_mitarbeiter
       ON tbl_abteilung.abteilung_ID = tbl_mitarbeiter.abteilung_ID

Die erste Zeile bleibt gleich. Wir suchen den Nachnamen des Mitarbeiters und den Namen der Abteilung.
Die zweite und dritte Zeile zusammen geben an, welche Tabellen wie zu verbinden sind. Prinzipiell sollte die Mastertabelle – also die mit dem Primärschlüssel – in der FROM-Anweisung stehen.
Die ON-Anweisung enthält unsere Bedingung für den Vergleich und damit den Verbund. Denn nur wenn Primär- und Fremdschlüssel übereinstimmen, gehören Abteilung und Mitarbeiter auch wirklich zusammen.

Wir führen die Abfrage aus Abfrage ausführen  und sehen das gleiche Ergebnis wie zuvor. Sie können nun die Anweisung verändern, z.B. die Reihenfolge oder Namen der Tabellen. Versuchen Sie nachzuvollziehen, was sich ändert.

Wie schon erwähnt ist vor jeden Spaltenbezeichner der dazugehörige Tabellenbezeichner gesetzt worden – getrennt durch einen Punkt. Tabellenbezeichner.Spaltenbezeichner
Damit weisen wir das Datenbank Managementsystem (DBMS) darauf hin, in welcher Tabelle die betreffende Spalte zu suchen ist. Bei der Aufzählung der anzuzeigenden Spalten wäre das noch nicht erforderlich gewesen, die Anweisung hätte auch wie folgt funktioniert:

SELECT name, abteilungsname
FROM   tbl_abteilung
       INNER JOIN tbl_mitarbeiter
       ON tbl_abteilung.abteilung_ID = tbl_mitarbeiter.abteilung_ID

Das funktioniert aber auch nur so lange, wie die verwendeten Spaltenbezeichner in nur einer der beiden Tabellen vorkommen. Die Tabellen tbl_abteilung und tbl_mitarbeiter enthalten dagegen beide die Spalte abteilung_ID, und das zwingt uns, in der ON- oder der WHERE-Anweisung bei dieser Spalte die Tabellen explizit anzugeben.